<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>
    /*定义一个猫类，这种就是使用构造函数来定义类(原型对象)*/
    function Cat(){
        this.Name="catName";//public属性
        this.Age;//public属性
        this.Color;//public属性
        var weight=2;//private属性，只能在Cat类内部使用，Cat类的对象无法访问这个私有属性
        //public方法
        this.publicFunction = function(){
            alert(weight);
            alert("猫叫...");
        }
        //private方法，只能在Cat类内部使用，Cat类的对象无法访问这个私有方法
        var privateFunction = function(){
            alert("私有方法");
        }


    }
    //如果这样用，那么就当成函数来使用
    Cat();
    //如果这样用，那么就当成类来使用
    var cat1 = new Cat();
    //cat1就是一个对象(实例)
    alert(cat1.Name);//访问公共属性，弹出默认值catName
    cat1.Name="TomCat";//访问公共属性
    cat1.Age=3;//访问公共属性
    cat1.Color="白色";//访问公共属性
    alert(cat1.weight);//访问私有属性，无法访问，弹出undefined
    alert(cat1.Name+"\t"+cat1.Age+"\t"+cat1.Color);//访问对象的属性方式1：对象名.属性名
    alert(cat1["Name"]+"\t"+cat1["Age"]+"\t"+cat1["Color"]);//访问对象的属性方式2：对象名["属性名"]
    cat1.publicFunction();//调用public方法
    cat1.privateFunction();//调用private方法，报错：对象不支持此属性或方法
    for(var property in cat1){
        document.writeln(property+"\t");
    }
</script>
</body>
</html>